Cap. 1 Objetos e Classes

GAC125 - Introdução à Programação Orientada a Objetos

DAC - ICET - Universidade Federal de Lavras

24/08/2023

Como estudar esse conteúdo?

Uma dica fundamental é:

  • O conteúdo é totalmente atrelado à prática usando o BlueJ.

  • Não adianta ler os slides, ou ficar apenas assistindo à videoaula.

  • É necessário usar o BlueJ e praticar você mesmo!

  • Se ainda não instalou o BlueJ em seu computador, a hora é agora!

Prints do BlueJ.

Como estudar esse conteúdo?

Além disso, estes slides se baseiam no Cap. 1 do livro do Barnes e Kölling.

Capa do livro do Barnes e Kolling.

  • Eles seguem de forma bem direta o livro, com algumas poucas coisas a mais.
  • Portanto, é muito interessante também ler o capítulo no livro para tirar dúvidas e complementar o que está sendo estudado.

Dica: faça anotações!

Em qualquer dos casos, é altamente recomendável, ter um caderno e caneta para anotar os principais conceitos e eventuais dúvidas que surgirem.

Principais Conceitos do Capítulo

  • Objetos
  • Classes
  • Métodos
  • Parâmetros

Vamos começar nossa jornada no mundo da Programação Orientada a Objetos (PPOO)!

Começaremos pelos conceitos mais importantes que são a base de tudo: Objetos e Classes

1.1 Objetos e Classes

Como você descreveria essa cena para alguém não a está vendo?

Provavelmente listando os objetos que nela se encontram.

  • Isso porque nós entendemos o mundo através dos objetos!

E o que essas imagens têm em comum?

Elas são objetos!

Ao criar um programa em uma linguagem Orientada a Objetos (OO)

  • você está criando um modelo de alguma parte do mundo;
  • e as partes do modelo são construídas a partir de objetos do domínio do problema.

Os objetos que criamos dependem do problema que estamos resolvendo

  • Se estiver criando um software como o Word, os objetos podem ser palavras e parágrafos.
  • Já se estiver programando uma rede social, podem ser usuários e mensagens.
  • Mas podem ser também monstros se estiver criando um jogo.

Os objetos podem ser coisas mais concretas, como jogadores em um jogo de futebol.

  • Ou coisas mais abstratas, como um campeonato ou uma partida do jogo

Conceito

Objetos Java modelam objetos do domínio de um problema.

Objetos podem ser categorizados

Uma classe descreve, de forma abstrata, todos os objetos de um tipo específico.

Para ficar mais claro, vamos pensar em um exemplo: uma simulação de trânsito.

  • Claramente, nós precisaremos lidar com carros.
  • Nesse contexto, um carro é uma classe ou um objeto?

Para nos ajudar a decidir, vamos pensar em algumas perguntas?

  • Qual a cor do carro?
  • O carro é rápido?
  • Qual direção está indo agora?

Não dá para responder sem especificar de qual carro estamos falando.

  • Isso porque a palavra “carro” nesse contexto, se refere a uma classe carro.
  • Estamos falando de carros em geral e não de um carro em particular.

Agora, se eu digo: “meu carro velho está parado no estacionamento”.

  • Podemos responder às perguntas.
  • O carro é prata, é lento, e está no estacionamento.

Portanto, agora estou falando de um objeto carro, pois é um exemplo de um carro em particular.

Uma classe pode ser vista como o projeto de um carro:

Em uma fábrica de automóveis, por exemplo:

  • Os engenheiros criam o projeto do carro.
  • Depois os carros são produzidos de acordo com aquele projeto.

Nesse exemplo o projeto seria a classe, e os carros os objetos.

Uma classe pode ser vista como a planta de uma casa:

Em um conjunto habitacional:

  • O engenheiro cria uma planta idêntica para todas as casas.
  • As casas são então construídas de acordo com a planta.

Nesse exemplo a planta seria a classe, e as casas os objetos.

Pode realmente acontecer de nosso programa ter apenas um objeto de uma determinada classe.

Costumamos dizer que um objeto particular é uma instância de uma classe.

  • Instância é sinônimo de exemplar daquele tipo
  • É sinônimo de objeto em OO.
  • Serve para enfatizar que é um exemplo particular de um classe específica.

Conceito

Objetos são criados a partir de classes. A classe descreve o tipo do objeto; e os objetos representam instâncias individuais da classe.

1.2 Criando objetos

Baixe o projeto de exemplo figuras e abra-o no BlueJ.

Como baixar o projeto?

Os projetos da disciplina são disponibilizados no GitHub. Se nunca o utilizou, não se preocupe.

  • Clicando no link do projeto você verá um botão verde bem destacado escrito Code.
  • Clique nele e vá na última opção: Download ZIP.
  • Descompacte o arquivo no seu computador, entre na pasta criada e clique duas vezes no arquivo: package.bluej.

Ao abrir o projeto verá um diagrama.

  • Cada retângulo representa uma classe no seu projeto.
  • Clique com o botão direito em Circulo e escolha a opção new Circulo().
  • O sistema pedirá o nome da instância, apenas clique em OK.

Você verá um retângulo na parte inferior do BlueJ, chamado “circulo1”.

Acabamos de criar nosso primeiro objeto.

  • A caixa retangular representa a classe Circulo.
  • E circulo1 é um objeto dessa classe.
    • Essa parte que mostra os objetos é chamada de bancada de objetos.

Convenção

Começamos os nomes de classes com letras maiúsculas e os nomes de objetos com letras minúsculas. Isso ajuda a identificar do que estamos falando.

Exercício

Agora é com você: experimente criar outro círculo e um quadrado.

1.3 Chamando métodos

Clique com o botão direito no objeto círculo (não na classe!) e você verá um menu com várias opções.

Escolha a opção exibir no menu - Isso vai desenhar uma representação do círculo em uma janela separada

Veja que existem várias opções no menu do círculo.

  • Tente chamar moverDireita e moverBaixo algumas vezes até o círculo chegar perto do canto.
  • Experimente também usar exibir e esconder.

Exercício

O que acontece se você chamar moverBaixo duas vezes? Ou três vezes? O que acontece se chamar esconder duas vezes?

As opções do menu círculo representam operações que você pode usar para manipular o círculo

  • Elas são chamadas de métodos em Java.
  • Nós dizemos que os métodos são chamados ou invocados.

Conceito

Podemos nos comunicar com objetos através da chamada de seus métodos. Geralmente os objetos fazem alguma coisa quando chamamos um método.

Nós podemos entender métodos também como comportamentos, ou mensagens que podem ser enviadas para os objetos.

Em um jogo de futebol, por exemplo, quais são os comportamentos que um jogador pode ter?

Alguns exemplos são: chutar, dar passe e correr.

  • Portanto, um objeto jogador poderia ter os métodos chutar, darPasse e correr.

fazerGol seria um método válido para um objeto jogador? - Veja que o comportamento do jogador no jogo é chutar a bola. Fazer gol é uma consequência que pode acontecer ou não.

1.4 Parâmetros

Vamos agora chamar o método moverHorizontal

  • Veja que aparece uma caixa de diálogo que pede uma informação.

Digite 50 e clique em OK.

  • Você verá que o círculo de move 50 pixels para a direita.

O método que usamos precisa de informação adicional para ser executado.

  • Nesse caso, é a distância que o círculo deve ser mover.
  • Veja que o método moverHorizontal é mais flexível que os métodos moverDireita e moverEsquerda que movem sempre por uma distância fixa.

Conceito

Métodos podem ter parâmetros para fornecer informação adicional para uma tarefa.

Exercício

Tente chamar os métodos moverVertical, moverVerticalLento e mudarTamanho antes de continuar lendo. Descubra como o método moverHorizontal pode ser usado para movimentar o círculo 70 pixels para a esquerda.

As informações adicionais que alguns métodos precisam para executar são chamadas parâmetros.

  • O método indica que tipos de parâmetros ele precisa.

Ao chamar o método moverHorizontal vemos na caixa de diálogo o seguinte:

void moverHorizontal(int distancia)

Isso é o que chamamos de assinatura do método.

  • A parte que está entre parênteses (int distancia) indica as informações que o método precisa para executar.
  • Para cada parâmetro, temos:
    • o tipo que indica o tipo de dado do parâmetro
    • e o nome que dá uma ideia sobre o que significa a informação que é esperada.

Conceito

O nome do método e os tipos dos seus parâmetros são chamados de assinatura. Ela tem todas as informações necessárias para chamar o método.

Quais poderiam ser os parâmetros de um método chutar de um objeto jogador em um jogo de futebol?

Os parâmetros poderiam ser, por exemplo, a direção e a força do chute.

1.5 Tipos de Dados

Um tipo indica quais tipos de dados podem ser passados para um parâmetro.

  • No caso do método moverHorizontal o valor passado deve ser um inteiro (int).

A maior parte dos métodos do projeto figuras que espera parâmetros, são parâmetros inteiros.

  • Repare que ao clicarmos com o botão direito em um objeto (ex: circulo1), os métodos são listados já mostrando os parâmetros que eles esperam.

Conceito

Parâmetros têm tipos. O tipo define quais tipos de valores um parâmetro pode receber

Veja que o método mudarCor espera um parâmetro do tipo String (texto).

  • Strings em Java devem ser passadas entre aspas duplas (ex: "vermelha").

Veja que quando clicamos em um método no BlueJ, a caixa de diálogo mostra também um texto de comentário antes da assinatura do método.

  • Comentários são usados para fornecer informações para nós, programadores.
  • Veja que o comentário do método mudarCor indica quais são as cores que o programa conhece.

Exercício

Chame o método mudarCor para um dos seus círculos e use a string “vermelha”. Tente também outras cores.

Exercício

Experimente o que acontece quando você tenta usar uma cor que não existe.

Exercício

Tente chamar o método mudarCor e passar uma cor como parâmetro, mas sem as aspas. O que acontece?

1.6 Múltiplas Instâncias

A partir de uma classe, você pode criar vários objetos (ou instâncias).

  • Usando a classe Circulo você pode cirar muitos círculos. E o mesmo acontece com a classe Quadrado.

Exercício

Crie vários objetos círculos, usando a opção new Circulo() no menu da classe Circulo. Faça um grande e amarelo e outro pequeno e verde. Experimente também criar alguns triângulos, quadrados e pessoas, mudando suas posições, tamanhos e cores.

Cada um desses objetos tem sua própria posição, cor e tamanho.

  • Você pode mudar uma característica de um objeto (como o tamanho), chamando um método daquele objeto.
  • Isso muda apenas aquele objeto e não os demais.
  • Nós costumamos chamar as característica dos objetos de atributos.

Conceito

Múltiplas instâncias: muitos objetos similares podem ser criados a partir de uma única classe.

Ao fazer o último exercício você deve ter notado que o método mudarTamanho da classe Triangulo tem a seguinte assinatura.

void mudarTamanho(int novaAltura, int novaLargura)

Portanto, esse é um exemplo de um método com mais de um parâmetro.

  • De fato, métodos pode ter quaisquer quantidades de parâmetros.

1.7 Estado

Nós chamamos de estado de um objeto, o conjunto dos valores de todos os seus atributos.

  • Para um círculo, por exemplo, seriam os valores de sua posição (X e Y), sua cor, seu diâmetro e sua informação de visibilidade.

Podemos ver o estado de um objeto no BlueJ através da opção Inspecionar do menu de um objeto.

  • Ela exibe o Inspetor de objetos que mostra os atributos guardados dentro de um objeto.

Exercício

Crie vários objetos de uma mesma classe e inspecione o estado de cada um. Com o inspetor de objetos aberto, mude o estado de um objeto (chamando o método moverEsquerda, por exemplo). Você verá os valores sendo modificados no inspetor de objetos.

No exercício vimos que alguns métodos, quando chamados, podem alterar o estado de um objeto.

  • O método moverEsquerda, por exemplo, muda o valor do atributo posicaoX.
  • Na linguagem Java, esses atributos também são chamados de campos.

1.8 O que tem dentro de um objeto

Inspecionando objetos diferentes, você deve ter notado que objetos da mesma classe tem todos os mesmos atributos.

  • Ou seja, a quantidade, o tipo e os nomes dos campos são os mesmos.
  • Mas os valores de um atributo de cada objeto podem ser diferentes.

Já objetos de classes diferentes podem ter atributos diferentes.

  • Por exemplo: um círculo tem o atributo diâmetro, já um triângulo tem os atributos largura e altura.

Mas por que será que isso acontece?

  • É que a quantidade, os tipos e os nomes dos atributos são definidos em uma classe, e não em um objeto.

A classe Circulo, por exemplo, define que um objeto círculo terá cinco atributos chamados:

  • diametro
  • posicaoX
  • posicaoY
  • cor
  • estaVisivel

A classe também define os tipos de cada atributo: os primeiros são int, a cor é do tipo String e o último é boolean (verdadeiro ou falso).

Assim, quando um objeto da classe Círculo for criado, o objeto terá esses atributos.

  • Já os valores dos atributos são guardados dentro do objeto.
  • Por isso, que cada círculo pode ter uma cor diferente, por exemplo.

A mesma ideia vale para os métodos.

  • Métodos são definidos na classe do objeto.
  • Assim, objetos da mesma classe têm os mesmos métodos.

Mas, repare que os métodos são chamados nos objetos.

  • Assim, quando o método moverDireita é chamado para um círculo, é apenas esse círculo que se move.

Exercício

Escolha uma das imagens abaixo e tente criar uma imagem parecida usando as formas do projeto figuras. Mas seja criativo e utilize cores, posições e tamanhos diferentes. Ao fazer isso, anote o que você teve que fazer para conseguir. Seria possível fazer de formas diferentes?

Entrega no Campus Virtual

Tire um print da imagem que você criou no exercício anterior. Você precisará desse print para as atividades de entrega dessa aula!

1.9 Valores de Retorno

Vamos reforçar os conceitos que aprendemos usando agora um outro exemplo.

  • Baixe o projeto de exemplo disciplina e abra-o no BlueJ.

Exercício

Crie um objeto da classe Estudante. Veja que agora você precisa fornecer não só o nome do objeto, mas também alguns outros parâmetros.

Exercício

Crie alguns objetos da classe Estudante. Chame o método obterNome de cada objeto. Explique o que está acontecendo.

O método obterNome da classe Estudante tem algo diferente:

  • Ele pode retornar um valor.

Nós conseguimos saber o tipo do valor retornado pela assinatura do método

String obterNome()

A palavra String antes do nome do método indica que ele retorna um valor string (texto).

Agora repare a assinatura do método mudarNome.

  • A palavra void indica que o métod não retorna nenhum valor.
void mudarNome(String novoNome)

Portanto, podemos obter informações de um objeto através de uma chamada de método.

  • Quer dizer então que os métodos podem mudar o estado de um objeto e/ou retornar algo sobre seu estado.

Conceito

Métodos podem retornar informação sobre o objeto através de um valor de retorno

1.10 Objetos como Parâmetros

Vamos agora criar um objeto da classe Disciplina no projeto disciplina, chamado poo.

  • Acesse o método matricularEstudante, o que o método espera como parâmetro?

Exercício

Crie três estudantes e matricule-os na disciplina poo. Em seguida, chame o método exibirLista do objeto poo.

Fazendo o exercício podemos perceber que objetos podem ser passados como parâmetros de métodos de outros objetos.

  • Quando um método espera um objeto como parâmetro, o tipo do parâmetro é o nome da classe do objeto que deve ser passado.

1.11 Entregas dessa Aula

As aulas teóricas da disciplina GAC125 - Introdução à Programação Orientada a Objetos são no formato ANP (Atividade Não-Presencial).

  • Isso significa que você precisa estudar o conteúdo da aula à distância (assistindo à videoaula, seguindo os slides e fazendo os exercícios propostos).

Para que você tenha a presença considerada para essa aula, você precisa demonstrar que realmente estudou o conteúdo. Para essa aula, faça os itens a seguir.

Entregas no Campus Virtual

  1. Responda ao quiz de perguntas teóricas disponibilizado no Campus Virtual.

  2. Envie o print que tirou no exercício da seção 1.8.

  3. Envie também o print da tela que aparece no último passo do exercício abaixo.

Exercício

Usando o projeto disciplina, crie um objeto para representar a nossa disciplina.

  • Defina o professor, a sala e o horário das aulas.
  • Em seguida, matricule pelo menos dois alunos na disciplina (um deles deve ser você, ou seja, deve ter seu nome e número de matrícula).
  • Por fim, chame o método exibirLista para o objeto da disciplina.